Node.js API Authentication Guide

உங்கள் Node.js APIகளைப் பாதுகாக்க முழுமையான அங்கீகார முறைகள் மற்றும் பாதுகாப்பு சிறந்த நடைமுறைகள்

API அங்கீகாரம் என்றால் என்ன?

API அங்கீகாரம் என்பது உங்கள் Node.js APIகளை அணுகும் வாடிக்கையாளர்களின் அடையாளத்தை சரிபார்க்கும் செயல்முறையாகும்.

இந்த விரிவான வழிகாட்டி பல்வேறு அங்கீகார முறைகள், பாதுகாப்பு சிறந்த நடைமுறைகள் மற்றும் செயல்படுத்தல் வடிவங்களை உள்ளடக்கியது, இது உங்கள் Node.js பயன்பாடுகளை திறம்பட பாதுகாக்க உதவுகிறது.

API அங்கீகாரம் ஏன் முக்கியமானது

இன்றைய இணைக்கப்பட்ட உலகில், API பாதுகாப்பு விருப்பமானது அல்ல - இது ஒரு அவசியமாகும். சரியான அங்கீகாரம் உங்களுக்கு உதவுகிறது:

பாதுகாப்பு நன்மைகள்

  • அணுகல் கட்டுப்பாடு: அங்கீகரிக்கப்பட்ட பயனர்களுக்கு மட்டுமே API அணுகலை கட்டுப்படுத்தவும்
  • தரவு பாதுகாப்பு: அங்கீகரிக்கப்படாத அணுகலிலிருந்து உணர்திறன் தகவல்களைப் பாதுகாக்கவும்
  • அடையாள சரிபார்ப்பு: பயனர்கள் யார் என்று கூறுகிறார்களோ அதை உறுதிப்படுத்தவும்

வணிக நன்மைகள்

  • பயன்பாட்டு பகுப்பாய்வு: பயனர்/பயன்பாட்டின்படி API பயன்பாட்டைக் கண்காணிக்கவும்
  • மொனடிசேஷன்: பயன்பாட்டை அடிப்படையாகக் கொண்ட பில்லிங் மாதிரிகளை செயல்படுத்தவும்
  • இணக்க தன்மை: ஒழுங்குமுறை தேவைகளைப் பூர்த்தி செய்யவும் (GDPR, HIPAA, முதலியன)

அங்கீகார முறைகள் கண்ணோட்டம்

வெவ்வேறு அங்கீகார முறைகள் வெவ்வேறு பயன்பாட்டு வழக்குகளுக்கு சேவை செய்கின்றன. இங்கே ஒரு விரைவான ஒப்பீடு:

முறை சிறந்தது சிக்கலான தன்மை பாதுகாப்பு நிலை
Session-Based பாரம்பரிய வலை பயன்பாடுகள் குறைந்த நடுத்தர
JWT (Token-Based) SPAs, மொபைல் பயன்பாடுகள் நடுத்தர அதிக
API Keys சேவையகம்-க்கு-சேவையகம் குறைந்த குறைந்த-நடுத்தர
OAuth 2.0 மூன்றாம் தரப்பு அணுகல் அதிக மிக அதிக

Session-Based அங்கீகாரம்

Session-based அங்கீகாரம் பயனர் நிலையை பராமரிக்க குக்கீகளைப் பயன்படுத்துகிறது:

const express = require('express');
const session = require('express-session');
const bodyParser = require('body-parser');
const app = express();

// Parse request bodies
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

// Configure sessions
app.use(session({
  secret: 'your-secret-key',
  resave: false,
  saveUninitialized: false,
  cookie: { secure: process.env.NODE_ENV === 'production', maxAge: 24 * 60 * 60 * 1000 } // 24 hours
}));

// Sample user database
const users = [
  { id: 1, username: 'user1', password: 'password1' }
];

// Login route
app.post('/login', (req, res) => {
  const { username, password } = req.body;
 
  // Find user
  const user = users.find(u => u.username === username && u.password === password);
 
  if (!user) {
    return res.status(401).json({ message: 'Invalid credentials' });
  }
 
  // Store user information in session (excluding password)
  req.session.user = {
    id: user.id,
    username: user.username
  };
 
  res.json({ message: 'Login successful', user: req.session.user });
});

// Protected route
app.get('/profile', (req, res) => {
  // Check if user is logged in
  if (!req.session.user) {
    return res.status(401).json({ message: 'Unauthorized' });
  }
 
  res.json({ message: 'Profile accessed', user: req.session.user });
});

// Logout route
app.post('/logout', (req, res) => {
  // Destroy session
  req.session.destroy((err) => {
    if (err) {
      return res.status(500).json({ message: 'Logout failed' });
    }
    res.json({ message: 'Logout successful' });
  });
});

// Start server
app.listen(8080, () => {
  console.log('Server running on port 8080');
});

Token-Based அங்கீகாரம் (JWT)

JSON Web Tokens (JWT) ஒரு நிலையற்ற அங்கீகார பொறிமுறையை வழங்குகின்றன, இது கச்சிதமானது மற்றும் சுய-கொண்டுள்ளது.

Session-based அங்கீகாரத்தைப் போலல்லாமல், token-based அங்கீகாரம் (JWT) ஒரு சேவையகம் அமர்வு தரவை சேமிக்க தேவையில்லை.

இது நிலையற்ற API கட்டமைப்பு மற்றும் மைக்ரோசர்விசுகளுக்கு ஏற்றது.

const express = require('express');
const jwt = require('jsonwebtoken');
const bodyParser = require('body-parser');
const app = express();

app.use(bodyParser.json());

const JWT_SECRET = 'your-jwt-secret-key';

// Sample user database
const users = [
  { id: 1, username: 'user1', password: 'password1', role: 'user' }
];

// Login route - generate token
app.post('/login', (req, res) => {
  const { username, password } = req.body;

  // Find user
  const user = users.find(u => u.username === username && u.password === password);

  if (!user) {
    return res.status(401).json({ message: 'Invalid credentials' });
  }

  // Create payload for JWT
  const payload = {
    id: user.id,
    username: user.username,
    role: user.role
  };

  // Sign token
  const token = jwt.sign(payload, JWT_SECRET, { expiresIn: '1h' });

  res.json({ message: 'Login successful', token });
});

// Middleware for JWT verification
const authenticateJWT = (req, res, next) => {
  // Get auth header - The Authorization header is commonly used to send authentication tokens
  const authHeader = req.headers.authorization;

  if (!authHeader) {
    return res.status(401).json({ message: 'Authorization header missing' });
  }

  // Extract token from "Bearer "
  const token = authHeader.split(' ')[1];

  if (!token) {
    return res.status(401).json({ message: 'Token missing' });
  }

  try {
    // Verify token
    const decoded = jwt.verify(token, JWT_SECRET);

    // Attach user to request
    req.user = decoded;

    next();
  } catch (error) {
    return res.status(403).json({ message: 'Invalid or expired token' });
  }
};

// Protected route
app.get('/profile', authenticateJWT, (req, res) => {
  res.json({ message: 'Profile accessed', user: req.user });
});

// Role-based route
app.get('/admin', authenticateJWT, (req, res) => {
  // Check if user has admin role
  if (req.user.role !== 'admin') {
    return res.status(403).json({ message: 'Access denied: admin role required' });
  }

  res.json({ message: 'Admin panel accessed' });
});

// Start server
app.listen(8080, () => {
  console.log('Server running on port 8080');
});

OAuth 2.0 அங்கீகாரம்

OAuth 2.0 என்பது அங்கீகாரத்திற்கான தொழில் தர நெறிமுறையாகும், இது HTTP சேவைகளில் பயனர் கணக்குகளுக்கு வரையறுக்கப்பட்ட அணுகலைப் பெற பயன்பாடுகளை இயக்குகிறது.

இது பயனர் அங்கீகாரத்தை பயனர் கணக்கை வைத்திருக்கும் சேவைக்கு ஒப்படைப்பதன் மூலம் வேலை செய்கிறது.

OAuth 2.0 ஃப்ளோ கண்ணோட்டம்

பயனர் உங்கள் பயன்பாட்டில் "Login with [Provider]" ஐக் கிளிக் செய்கிறார்
பயனர் வழங்குநரின் உள்நுழைவு பக்கத்திற்கு திருப்பி விடப்படுகிறார்
பயனர் அங்கீகரிக்கப்பட்டு உங்கள் பயன்பாட்டிற்கு அங்கீகாரம் அளிக்கிறார்
வழங்குநர் ஒரு அங்கீகார குறியீட்டுடன் உங்கள் பயன்பாட்டிற்கு திருப்பி விடுகிறார்
உங்கள் பயன்பாடு குறியீட்டை அணுகல் டோக்கனுக்கு பரிமாறுகிறது
உங்கள் பயன்பாடு இப்போது பயனரின் தரவை அணுகலாம் (அங்கீகரிக்கப்பட்ட நோக்கத்திற்குள்)

Passport.js உடன் செயல்படுத்தல்

const express = require('express');
const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth20').Strategy;
const session = require('express-session');
const app = express();

// Configure sessions for OAuth 2.0
app.use(session({
  secret: 'your-secret-key',
  resave: false,
  saveUninitialized: false,
  cookie: { secure: process.env.NODE_ENV === 'production' }
}));

// Initialize Passport
app.use(passport.initialize());
app.use(passport.session());

// Configure Google OAuth 2.0 strategy
passport.use(new GoogleStrategy({
    clientID: 'YOUR_GOOGLE_CLIENT_ID',
    clientSecret: 'YOUR_GOOGLE_CLIENT_SECRET',
    callbackURL: 'http://localhost:8080/auth/google/callback'
  },
  (accessToken, refreshToken, profile, done) => {
    // In a real app, you'd find or create a user in your database
    const user = {
      id: profile.id,
      displayName: profile.displayName,
      email: profile.emails[0].value,
      provider: 'google'
    };
   
    return done(null, user);
  }
));

// Serialize user for session
passport.serializeUser((user, done) => {
  done(null, user);
});

// Deserialize user from session
passport.deserializeUser((user, done) => {
  done(null, user);
});

// Routes for Google OAuth
app.get('/auth/google',
  passport.authenticate('google', { scope: ['profile', 'email'] })
);

app.get('/auth/google/callback',
  passport.authenticate('google', { failureRedirect: '/login' }),
  (req, res) => {
    // Successful authentication
    res.redirect('/profile');
  }
);

// Middleware to check authentication
const isAuthenticated = (req, res, next) => {
  if (req.isAuthenticated()) {
    return next();
  }
  res.redirect('/login');
};

// Protected route
app.get('/profile', isAuthenticated, (req, res) => {
  res.json({ user: req.user });
});

// Logout route
app.get('/logout', (req, res) => {
  req.logout();
  res.redirect('/');
});

// Start server
app.listen(8080, () => {
  console.log('Server running on port 8080');
});

API Key அங்கீகாரம்

API விசைகள் உங்கள் APIக்கு வாடிக்கையாளர்களை அங்கீகரிக்க ஒரு எளிய வழியாகும்.

சேவையகம்-க்கு-சேவையகம் தகவல்தொடர்புக்கு அல்லது பயனர் சூழல் இல்லாமல் அழைக்கும் திட்டத்தை அடையாளம் காண வேண்டிய போது அவை மிகவும் பொருத்தமானவை.

🔑 API விசைகளுக்கான சிறந்த நடைமுறைகள்:

  • விசைகளை பாதுகாப்பாக சேமிக்கவும் (சூழல் மாறிகள், ரகசிய மேலாண்மை சேவைகள்)
  • விசைகளை தவறாமல் சுழற்றவும்
  • விசை வெளிப்பாட்டைத் தடுக்க HTTPS ஐப் பயன்படுத்தவும்
  • ஒரு விசைக்கு விகிதம் கட்டுப்பாட்டை செயல்படுத்தவும்
const express = require('express');
const app = express();

// Sample API keys database
const apiKeys = [
  { key: 'api-key-1', owner: 'client1', permissions: ['read'] },
  { key: 'api-key-2', owner: 'client2', permissions: ['read', 'write'] }
];

// Middleware for API key authentication
const authenticateApiKey = (req, res, next) => {
  // Get API key from header or query parameter
  const apiKey = req.headers['x-api-key'] || req.query.api_key;
 
  if (!apiKey) {
    return res.status(401).json({ message: 'API key missing' });
  }
 
  // Find API key in database
  const keyData = apiKeys.find(k => k.key === apiKey);
 
  if (!keyData) {
    return res.status(403).json({ message: 'Invalid API key' });
  }
 
  // Attach key data to request
  req.apiKeyData = keyData;
 
  next();
};

// Protected route with API key
app.get('/data', authenticateApiKey, (req, res) => {
  res.json({
    message: 'Data accessed',
    client: req.apiKeyData.owner,
    data: { example: 'API data' }
  });
});

// Route requiring specific permission
app.post('/data', authenticateApiKey, (req, res) => {
  // Check if client has write permission
  if (!req.apiKeyData.permissions.includes('write')) {
    return res.status(403).json({ message: 'Insufficient permissions' });
  }
 
  res.json({ message: 'Data created successfully' });
});

// Start server
app.listen(8080, () => {
  console.log('Server running on port 8080');
});

Basic அங்கீகாரம்

HTTP Basic அங்கீகாரம் Authorization தலைப்பில் குறியிடப்பட்ட சான்றுகளைப் பயன்படுத்துகிறது:

const express = require('express');
const app = express();

// Sample user database
const users = [
  { username: 'user1', password: 'password1' }
];

// Basic authentication middleware
const basicAuth = (req, res, next) => {
  // Get Authorization header
  const authHeader = req.headers.authorization;
 
  if (!authHeader || !authHeader.startsWith('Basic ')) {
    // If no credentials provided, request authentication
    res.setHeader('WWW-Authenticate', 'Basic realm="API Authentication"');
    return res.status(401).json({ message: 'Authentication required' });
  }
 
  // Extract and decode credentials
  const encodedCredentials = authHeader.split(' ')[1];
  const decodedCredentials = Buffer.from(encodedCredentials, 'base64').toString('utf-8');
  const [username, password] = decodedCredentials.split(':');
 
  // Validate credentials
  const user = users.find(u => u.username === username && u.password === password);
 
  if (!user) {
    res.setHeader('WWW-Authenticate', 'Basic realm="API Authentication"');
    return res.status(401).json({ message: 'Invalid credentials' });
  }
 
  // Attach user to request
  req.user = { username: user.username };
 
  next();
};

// Protected route
app.get('/api/data', basicAuth, (req, res) => {
  res.json({
    message: 'Data accessed',
    user: req.user.username,
    data: { example: 'Sensitive data' }
  });
});

// Start server
app.listen(8080, () => {
  console.log('Server running on port 8080');
});

Multi-Factor Authentication (MFA)

நேரம்-அடிப்படையிலான ஒரு-முறை கடவுச்சொற்கள் (TOTP) மூலம் கூடுதல் பாதுகாப்பு அடுக்கைச் சேர்த்தல்:

const express = require('express');
const bodyParser = require('body-parser');
const speakeasy = require('speakeasy');
const QRCode = require('qrcode');
const jwt = require('jsonwebtoken');
const app = express();

app.use(bodyParser.json());

// In-memory database (use a real database in production)
const users = [];
const JWT_SECRET = 'your-jwt-secret-key';

// Step 1: Register a user and set up MFA
app.post('/register', (req, res) => {
  const { username, password } = req.body;
 
  // Check if user already exists
  if (users.find(u => u.username === username)) {
    return res.status(400).json({ message: 'Username already exists' });
  }
 
  // Generate secret for TOTP
  const secret = speakeasy.generateSecret({
    name: `MyApp:${username}`
  });
 
  // Create user
  const newUser = {
    id: users.length + 1,
    username,
    password, // In production, hash passwords!
    mfaSecret: secret.base32,
    mfaEnabled: false
  };
 
  users.push(newUser);
 
  // Generate QR code for TOTP setup
  QRCode.toDataURL(secret.otpauth_url, (err, dataUrl) => {
    if (err) {
      return res.status(500).json({ message: 'Error generating QR code' });
    }
   
    res.json({
      message: 'User registered. Please set up MFA.',
      user: {
        id: newUser.id,
        username: newUser.username
      },
      mfaSecret: secret.base32,
      qrCode: dataUrl
    });
  });
});

// Step 2: Verify and enable MFA
app.post('/verify-mfa', (req, res) => {
  const { username, token } = req.body;
 
  // Find user
  const user = users.find(u => u.username === username);
 
  if (!user) {
    return res.status(404).json({ message: 'User not found' });
  }
 
  // Verify token against user's secret
  const verified = speakeasy.totp.verify({
    secret: user.mfaSecret,
    encoding: 'base32',
    token
  });
 
  if (!verified) {
    return res.status(400).json({ message: 'Invalid MFA token' });
  }
 
  // Enable MFA for user
  user.mfaEnabled = true;
 
  res.json({ message: 'MFA enabled successfully' });
});

// Step 3: Login with MFA
app.post('/login', (req, res) => {
  const { username, password } = req.body;
 
  // Find user
  const user = users.find(u => u.username === username && u.password === password);
 
  if (!user) {
    return res.status(401).json({ message: 'Invalid credentials' });
  }
 
  // Check if MFA is enabled
  if (user.mfaEnabled) {
    return res.json({
      message: 'Password verified. MFA token required.',
      requireMFA: true,
      userId: user.id
    });
  }
 
  // If MFA not enabled, generate token directly
  const token = jwt.sign(
    { id: user.id, username: user.username },
    JWT_SECRET,
    { expiresIn: '1h' }
  );
 
  res.json({ message: 'Login successful', token });
});

// Step 4: Verify MFA token and complete login
app.post('/verify-login', (req, res) => {
  const { userId, mfaToken } = req.body;
 
  // Find user
  const user = users.find(u => u.id === userId);
 
  if (!user) {
    return res.status(404).json({ message: 'User not found' });
  }
 
  // Verify MFA token
  const verified = speakeasy.totp.verify({
    secret: user.mfaSecret,
    encoding: 'base32',
    token: mfaToken
  });
 
  if (!verified) {
    return res.status(401).json({ message: 'Invalid MFA token' });
  }
 
  // Generate JWT token
  const token = jwt.sign(
    { id: user.id, username: user.username },
    JWT_SECRET,
    { expiresIn: '1h' }
  );
 
  res.json({ message: 'Login successful', token });
});

// Start server
app.listen(8080, () => {
  console.log('Server running on port 8080');
});

பாதுகாப்பு சிறந்த நடைமுறைகள்

⚠️ முக்கியமானது:

அங்கீகாரத்தை செயல்படுத்தும் போது பாதுகாப்பு விருப்பமானது அல்ல. உங்கள் பயன்பாடு மற்றும் பயனர்களைப் பாதுகாக்க இந்த சிறந்த நடைமுறைகளைப் பின்பற்றவும்.

கடவுச்சொல் பாதுகாப்பு

டோக்கன் பாதுகாப்பு

பொது பாதுகாப்பு

OAuth 2.0 பாதுகாப்பு

எடுத்துக்காட்டு: bcrypt உடன் பாதுகாப்பான கடவுச்சொல் ஹாஷிங்

const bcrypt = require('bcrypt');
const saltRounds = 10;

// Hashing a password
async function hashPassword(plainPassword) {
  return await bcrypt.hash(plainPassword, saltRounds);
}

// Verifying a password
async function verifyPassword(plainPassword, hashedPassword) {
  return await bcrypt.compare(plainPassword, hashedPassword);
}

அங்கீகார முறைகளை இணைத்தல்

நிஜ உலக பயன்பாடுகளில், நீங்கள் பெரும்பாலும் பல அங்கீகார முறைகளை இணைக்க வேண்டும்:

// JWT authentication with API rate limiting and refresh tokens
const express = require('express');
const jwt = require('jsonwebtoken');
const rateLimit = require('express-rate-limit');
const bodyParser = require('body-parser');
const app = express();

app.use(bodyParser.json());

// Configure rate limiting
const loginLimiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 minutes
  max: 5, // 5 attempts per window
  message: 'Too many login attempts, please try again later'
});

// JWT configuration
const JWT_SECRET = 'your-jwt-secret-key';
const JWT_REFRESH_SECRET = 'your-refresh-token-secret';

// Token storage (use a database in production)
const tokenBlacklist = new Set();
const refreshTokens = new Set();

// Login route with rate limiting
app.post('/login', loginLimiter, (req, res) => {
  const { username, password } = req.body;
 
  // Authentication logic (simplified)
  if (username !== 'user1' || password !== 'password1') {
    return res.status(401).json({ message: 'Invalid credentials' });
  }
 
  // Generate tokens
  const accessToken = jwt.sign(
    { id: 1, username },
    JWT_SECRET,
    { expiresIn: '15m' } // Short-lived access token
  );
 
  const refreshToken = jwt.sign(
    { id: 1, username },
    JWT_REFRESH_SECRET,
    { expiresIn: '7d' } // Longer-lived refresh token
  );
 
  // Store refresh token
  refreshTokens.add(refreshToken);
 
  res.json({
    message: 'Login successful',
    accessToken,
    refreshToken
  });
});

// Refresh token route
app.post('/refresh-token', (req, res) => {
  const { refreshToken } = req.body;
 
  if (!refreshToken) {
    return res.status(401).json({ message: 'Refresh token required' });
  }
 
  // Check if token exists and is not blacklisted
  if (!refreshTokens.has(refreshToken)) {
    return res.status(403).json({ message: 'Invalid refresh token' });
  }
 
  try {
    // Verify refresh token
    const decoded = jwt.verify(refreshToken, JWT_REFRESH_SECRET);
   
    // Generate new access token
    const accessToken = jwt.sign(
      { id: decoded.id, username: decoded.username },
      JWT_SECRET,
      { expiresIn: '15m' }
    );
   
    res.json({
      message: 'Token refreshed',
      accessToken
    });
  } catch (error) {
    // Remove invalid refresh token
    refreshTokens.delete(refreshToken);
   
    return res.status(403).json({ message: 'Invalid or expired refresh token' });
  }
});

// JWT verification middleware
const authenticateJWT = (req, res, next) => {
  const authHeader = req.headers.authorization;
 
  if (!authHeader || !authHeader.startsWith('Bearer ')) {
    return res.status(401).json({ message: 'Authorization header required' });
  }
 
  const token = authHeader.split(' ')[1];
 
  // Check if token is blacklisted
  if (tokenBlacklist.has(token)) {
    return res.status(403).json({ message: 'Token revoked' });
  }
 
  try {
    // Verify token
    const decoded = jwt.verify(token, JWT_SECRET);
    req.user = decoded;
    next();
  } catch (error) {
    return res.status(403).json({ message: 'Invalid or expired token' });
  }
};

// Logout route
app.post('/logout', authenticateJWT, (req, res) => {
  const authHeader = req.headers.authorization;
  const token = authHeader.split(' ')[1];
  const { refreshToken } = req.body;
 
  // Blacklist the current access token
  tokenBlacklist.add(token);
 
  // Remove refresh token if provided
  if (refreshToken) {
    refreshTokens.delete(refreshToken);
  }
 
  res.json({ message: 'Logout successful' });
});

// Protected route
app.get('/protected', authenticateJWT, (req, res) => {
  res.json({
    message: 'Protected resource accessed',
    user: req.user
  });
});

// Start server
app.listen(8080, () => {
  console.log('Server running on port 8080');
});

அங்கீகாரத்திற்கான HTTP தலைப்புகள்

API அங்கீகாரத்தை செயல்படுத்தும் போது, பயன்படுத்தப்படும் HTTP தலைப்புகள் முக்கியமானவை:

வெவ்வேறு API வகைகளுக்கான அங்கீகார உத்திகள்

API வகை பரிந்துரைக்கப்பட்ட அங்கீகாரம் கருத்தில் கொள்ள வேண்டியவை
பொது API API விசைகள் செயல்படுத்த எளிதானது, பயன்பாட்டைக் கண்காணிக்க சிறந்தது
சேவை-க்கு-சேவை API JWT (நிலையற்ற) அல்லது பரஸ்பர TLS குறைந்தபட்ச மேல்நிலை, அதிக பாதுகாப்பு
மொபைல்/வலை பயன்பாடு API OAuth 2.0 + JWT நல்ல பயனர் அனுபவம், மூன்றாம் தரப்பு அங்கீகாரத்தை கையாள்கிறது
ஒற்றை-பக்கம் பயன்பாடு API ரிஃப்ரெஷ் டோக்கன்களுடன் JWT முன்-முனை கட்டமைப்புகளுடன் நன்றாக வேலை செய்கிறது
IoT சாதனம் API வாடிக்கையாளர் சான்றிதழ்கள் அல்லது API விசைகள் வரையறுக்கப்பட்ட சாதன திறன்களை கையாள்கிறது

முடிவுரை

நீங்கள் இப்போது Node.js APIகளுக்கான அத்தியாவசிய அங்கீகார முறைகளை ஆராய்ந்துள்ளீர்கள். நாங்கள் உள்ளடக்கியவற்றின் விரைவான மறுபரிசீலனை இங்கே:

அங்கீகார முறைகள்

பாதுகாப்பு அத்தியாவசியங்கள்

பயிற்சி

சரியான HTTP தலைப்பு பெயரை இழுத்து விடவும்.

அங்கீகார டோக்கன்களை அனுப்ப பொதுவாக ______ தலைப்பு பயன்படுத்தப்படுகிறது.

Authentication
✗ தவறு! "Authentication" தலைப்பு அங்கீகார டோக்கன்களை அனுப்ப பொதுவாக பயன்படுத்தப்படுவதில்லை
X-Auth-Token
✗ தவறு! "X-Auth-Token" ஒரு தனிப்பயன் தலைப்பாகும், ஆனால் நிலையான தலைப்பு அல்ல
Authorization
✓ சரி! "Authorization" தலைப்பு JWT, OAuth மற்றும் Basic Auth உட்பட பெரும்பாலான API அங்கீகார உத்திகளில் அங்கீகார டோக்கன்களை அனுப்ப பொதுவாக பயன்படும் நிலையான HTTP தலைப்பாகும்
X-API-Key
✗ தவறு! "X-API-Key" தலைப்பு API விசை அங்கீகாரத்திற்கு பயன்படுத்தப்படுகிறது, ஆனால் பொதுவான அங்கீகார டோக்கன்களுக்கு அல்ல